package com.kitty.spring.annotationdriven.configuration;

import com.kitty.spring.annotationdriven.beans.Person;
import com.kitty.spring.annotationdriven.conditions.LinuxCondition;
import com.kitty.spring.annotationdriven.conditions.WindowsCondition;
import org.springframework.context.annotation.*;

/**
 * @Description
 * @Author SHEN
 * @Date 2020/12/6
 */
@Configuration
public class BeanConfig1 {


    /**
     * spring默认注入到ioc容器中的都是单实例bean
     * @Scope取值范围
     *prototype：多实例；ioc容器启动并不会创建实例，会在调用getBean方法的时候初始化bean并放到容器中
     *singleton：单实例；ioc容器启动时就会创建bean；
     *request：同一次请求创建一个实例；
     *session：同一个session创建一个实例
     *
     * @Lazy 懒加载
     *  不管是多实例还是单实例，容器创建的时候并不会初始化bean，等到容器创建完成，在调用getBean方法的时候才会创建并初始化bean
     *  并放到容器中；
     *
     *
     */
    @Scope
    @Lazy
    @Bean
    public Person person(){
        System.out.println("给容器添加bean");
        return new Person("张三",24,"大三子");
    }


    /**
     *@Conditional({Condition数组}) 更具条件添加bean到容器中
     *
     *
     */

    @Conditional({WindowsCondition.class})
    @Bean("bill")
    public Person person1(){
        return new Person("Bill gates",60,"小盖");
    }


    @Conditional(LinuxCondition.class)
    @Bean("linus")
    public Person person2(){
        return new Person("Linus",50,"小林");
    }



}
